package net.similarsu.device.sdk.dah.struct;

import com.sun.jna.Pointer;
import com.sun.jna.Structure;

import java.util.Arrays;

import static net.similarsu.device.sdk.dah.library.DahLibrary.*;

@Structure.FieldOrder({
        "dwSize"
        ,"nDoor"
        ,"szDoorName"
        ,"stuTime"
        ,"emEventType"
        ,"bStatus"
        ,"emCardType"
        ,"emOpenMethod"
        ,"szCardNo"
        ,"szPwd"
        ,"szReaderID"
        ,"szUserID"
        ,"szSnapURL"
        ,"nErrorCode"
        ,"nPunchingRecNo"
        ,"nNumbers"
        ,"emStatus"
        ,"szSN"
        ,"emAttendanceState"
        ,"szQRCode"
        ,"szCallLiftFloor"
})
public class ALARM_ACCESS_CTL_EVENT_INFO extends Structure {
    public int dwSize;
    public int nDoor;                              // 门通道号
    public byte[] szDoorName = new byte[DH_MAX_DOORNAME_LEN];    // 门禁名称
    public NET_TIME stuTime;                            // 报警事件发生的时间
    public int emEventType;                        // 门禁事件类型
    public int bStatus;                            // 刷卡结果,TRUE表示成功,FALSE表示失败
    public int emCardType;                         // 卡类型
    public int emOpenMethod;                       // 开门方式
    public byte[] szCardNo = new byte[DH_MAX_CARDNO_LEN];        // 卡号
    public byte[] szPwd = new byte[DH_MAX_CARDPWD_LEN];          // 密码
    public byte[] szReaderID = new byte[DH_COMMON_STRING_32];    // 门读卡器ID
    public byte[] szUserID = new byte[DH_COMMON_STRING_64];      // 开门用户
    public byte[] szSnapURL = new byte[DH_COMMON_STRING_256];    // 抓拍照片存储地址
    public int nErrorCode;                         // 开门失败的原因,仅在bStatus为FALSE时有效
    // 0x00 没有错误
    // 0x10 未授权
    // 0x11 卡挂失或注销
    // 0x12 没有该门权限
    // 0x13 开门模式错误
    // 0x14 有效期错误
    // 0x15 防反潜模式
    // 0x16 胁迫报警未打开
    // 0x17 门常闭状态
    // 0x18 AB互锁状态
    // 0x19 巡逻卡
    // 0x1A 设备处于闯入报警状态
    // 0x20 时间段错误
    // 0x21 假期内开门时间段错误
    // 0x30 需要先验证有首卡权限的卡片
    // 0x40 卡片正确,输入密码错误
    // 0x41 卡片正确,输入密码超时
    // 0x42 卡片正确,输入指纹错误
    // 0x43 卡片正确,输入指纹超时
    // 0x44 指纹正确,输入密码错误
    // 0x45 指纹正确,输入密码超时
    // 0x50 组合开门顺序错误
    // 0x51 组合开门需要继续验证
    // 0x60 验证通过,控制台未授权
    // 0x61 卡片正确,人脸错误
    // 0x62 卡片正确,人脸超时
    // 0x63 重复进入
    public int nPunchingRecNo;                     // 刷卡记录集中的记录编号
    public int nNumbers;                            // 抓图张数
    public int emStatus;                            // 卡状态
    public byte[] szSN = new byte[32];                           // 智能锁序列号
    public int emAttendanceState;                  // 考勤状态
    public byte[] szQRCode = new byte[512];                      // 二维码
    public byte[] szCallLiftFloor = new byte[16];                // 呼梯楼层号

    public ALARM_ACCESS_CTL_EVENT_INFO() {
        super();
    }

    public ALARM_ACCESS_CTL_EVENT_INFO(Pointer pointer) {
        super(pointer);
    }

    public static class ByReference extends ALARM_ACCESS_CTL_EVENT_INFO implements Structure.ByReference {
    }


    public static class ByValue extends ALARM_ACCESS_CTL_EVENT_INFO implements Structure.ByValue {
    }

    @Override
    public String toString() {
        return "ALARM_ACCESS_CTL_EVENT_INFO [dwSize=" + dwSize + ", nDoor="
                + nDoor + ", szDoorName=" + Arrays.toString(szDoorName)
                + ", stuTime=" + stuTime + ", emEventType=" + emEventType
                + ", bStatus=" + bStatus + ", emCardType=" + emCardType
                + ", emOpenMethod=" + emOpenMethod + ", szCardNo="
                + Arrays.toString(szCardNo) + ", szPwd="
                + Arrays.toString(szPwd) + ", szReaderID="
                + Arrays.toString(szReaderID) + ", szUserID="
                + Arrays.toString(szUserID) + ", szSnapURL="
                + Arrays.toString(szSnapURL) + ", nErrorCode=" + nErrorCode
                + ", nPunchingRecNo=" + nPunchingRecNo + "]";
    }
}
